Spring Beans and Dependency Injection
17. Spring Beans和依赖注入
你可以自由地使用任何标准的Spring框架技术去定义bean和它们注入的依赖。简单起见,我们经常发现使用@ComponentScan(用来注解搜索bean)和@Autowired(用来构造器注入)能够很好地工作。
如果遵循以上的建议组织代码结构(将应用的main类放到包的最上层,即root package),那么你就可以添加@ComponentScan注解而不需要任何参数,所有应用组件(@Component, @Service, @Repository, @Controller等)都会自动注册成Spring Beans。
下面是一个@Service Bean的示例,它使用构建器注入获取一个需要的RiskAssessor bean:
package com.example.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class DatabaseAccountService implements AccountService {
    private final RiskAssessor riskAssessor;
    @Autowired
    public DatabaseAccountService(RiskAssessor riskAssessor) {
        this.riskAssessor = riskAssessor;
    }
    // ...
}
如果bean里面有一个构造器,你可以省略@Autowired。
@Service
public class DatabaseAccountService implements AccountService { 
    private final RiskAssessor riskAssessor; 
    public DatabaseAccountService(RiskAssessor riskAssessor) { 
        this .riskAssessor = riskAssessor;
    } 
// ... 
} 
注 注意使用构建器注入允许riskAssessor字段被标记为final,这意味着riskAssessor后续是不能改变的。